1 module unde.tick;
2 
3 import unde.global_state;
4 import unde.lib;
5 
6 import unde.keybar.lib;
7 
8 import derelict.sdl2.sdl;
9 
10 import std.stdio;
11 import std.datetime;
12 
13 enum EventHandlerResult
14 {
15     Pass,
16     Block
17 }
18 
19 enum unDE_MouseButtons {
20     Left = 0x01,
21     Middle = 0x02,
22     Right = 0x04,
23 }
24 
25 void make_tick(GlobalState gs)
26 {
27     gs.games.dizzy_omega.tick(gs);
28 }
29 
30 void
31 process_event(GlobalState gs, SDL_Event event)
32 {
33     if (event.type == SDL_WINDOWEVENT)
34     {
35         switch (event.window.event) {
36             case SDL_WINDOWEVENT_SHOWN:
37             case SDL_WINDOWEVENT_EXPOSED:
38             case SDL_WINDOWEVENT_RESTORED:
39                 gs.window_shown = true;
40                 gs.games.dizzy_omega.reinit_draw = 2;
41                 break;
42             case SDL_WINDOWEVENT_HIDDEN:
43             case SDL_WINDOWEVENT_MINIMIZED:
44             case SDL_WINDOWEVENT_FOCUS_LOST:
45                 gs.window_shown = false;
46                 break;
47             default:
48                 break;
49         }
50         return;
51     }
52 
53     gs.games.dizzy_omega.process_event(gs, event);
54 }
55 
56 void process_events(GlobalState gs)
57 {
58     /* Our SDL event placeholder. */
59     SDL_Event event;
60     SDL_Event prev_event;
61 
62     /* Grab all the events off the queue. */
63     while( SDL_PollEvent( &event ) )
64     {
65         KeyHandler *keyhandler;
66         if (event.type == SDL_KEYDOWN)
67         {
68             keyhandler = event.key.keysym.scancode in gs.keybar.handlers_down;
69             if (keyhandler)
70             {
71                 keyhandler.handle(gs);
72             }
73         }
74         else if (event.type == SDL_KEYUP)
75         {
76             keyhandler = event.key.keysym.scancode in gs.keybar.handlers;
77             if (keyhandler)
78                 keyhandler.handle(gs);
79         }
80 
81         if (keyhandler is null)
82         {
83             process_event(gs, event);
84         }
85 
86         prev_event = event;
87     }
88 }
89 
90 void
91 make_screenshot(GlobalState gs) { 
92     SDL_Surface *screenshot; 
93     screenshot = SDL_CreateRGBSurface(SDL_SWSURFACE,
94             gs.screen.w+32*6, 
95             gs.screen.h, 
96             32, 0x00FF0000, 0X0000FF00, 0X000000FF, 0XFF000000); 
97     SDL_RenderReadPixels(gs.renderer, null, SDL_PIXELFORMAT_ARGB8888, 
98             screenshot.pixels, screenshot.pitch);
99     SDL_SaveBMP(screenshot, "screenshot.bmp"); 
100     SDL_FreeSurface(screenshot); 
101 }
102